Rails Luminary nominations open, new maintenance policy and more! | This Week in Rails
Rails Luminary Awardsは、Railsのエコシステムとコミュニティに貢献した人を称える表彰です
Railsのメンテナンスポリシーに関する変更です
プルリクエストの説明文に記載されていた変更点は次の3つです
メンテナンスの期間が明示されました
機能のバグ修正については、マイナーバージョンのリリースから1年間です
セキュリティ修正については、マイナーバージョンのリリースから2年間です
「重大なセキュリティ問題」と「通常のセキュリティ問題」の区別がなくなりました
Rails が提供するnpmパッケージのバージョン番号の表記が変わりました
これまではgemのバージョンにパッチより細かいバージョンがあるとき、- を使って表記していました
gemがバージョン7.0.1.4のとき、npmパッケージのバージョンは 7.0.1-4
プルリクエストには特に記載はありませんでしたが、セマンティックバージョニングの文脈では - をつかうと後続の表記はプレリリースバージョンの番号を意味することになるので混乱を招きそうですね
今後は0埋めをして表記されます
gemがバージョン7.0.1.4のとき、npmパッケージのバージョンは 7.0.104
ActiveModelに関する変更です
モデルにhas_secure_passwordを使用した場合にパスワードリセット用のTokenを利用できるようになりました
前提としてhas_secure_passwordについておさらいします
パスワードのハッシュ化と認証を簡単に行なうための機能です
password_digest カラムをもつUserモデルに has_secure_password を記載すると、
password 属性と password_confirmation 属性が追加されます
password 属性に値を設定しない(あるいは空文字列)で保存するとバリデーションエラーになり
password 属性と password_confirmation 属性の値が不一致の場合もバリデーションエラーになります
code:rb
# Schema: User(name:string, password_digest:string)
class User < ActiveRecord::Base
has_secure_password
end
user = User.new(name: "david", password: "", password_confirmation: "nomatch")
user.save # => false, password required
user.password = "vr00m"
user.save # => false, confirmation doesn't match
user.password_confirmation = "vr00m"
user.save # => true
今回のプルリクエストでは、パスワードリセット用のTokenを利用できるようになりました
code:rb
token = user.password_reset_token
User.find_by_password_reset_token(token) # returns user in the next 15 minutes.
# 16 minutes later...
User.find_by_password_reset_token(token) # returns nil
# raises ActiveSupport::MessageVerifier::InvalidSignature since the token is expired
User.find_by_password_reset_token!(token)
15分間だけ有効なTokenを発行できるようですね
ActionPackに関する変更です
どちらもルーティングの記載に関する変更なのでまとめて紹介します
ハッシュキーパスを使用したルーティングが非推奨になります
code:rb
# Before
get "/users" => "users#index"
post "/logout" => :sessions
mount MyApp => "/my_app"
# After
get "/users", to: "users#index"
post "/logout", to: "sessions#logout"
mount MyApp, at: "/my_app"
複数のパスを含むルーティングも非推奨になりました
code:rb
# Before
get "/users", "/other_path", to: "users#index"
# After
get "/users", to: "users#index"
get "/other_path", to: "users#index"
プルリクエストのAuthorによって、非推奨の書き方をやめると1.25~1.5倍高速になった、という実験結果が示されています